// 对axios函数的二次封装
// 利用axios请求,响应拦截器功能
// 请求拦截器，一般可以在请求头中携带一些公共参数  token
// 响应拦截器，简化服务器返回的数据结构，处理http错误

import axios from 'axios'
import {ElMessage} from "element-plus"
import useUserStore from "@/store/modules/user";

const request = axios.create({
	baseURL: '/api', // 接口请求基础路径设置
	timeout: 5000 // 请求超时时间
})

// 请求拦截器
request.interceptors.request.use(config => {
	// 拦截请求，在请求头中携带token
	let userStore = useUserStore();
	// 用户登录携带token
	if(userStore.info.token) {
		config.headers.token = userStore.info.token
	}
	return config
})

// 响应拦截器
request.interceptors.response.use(response => {
	// 成功的回调
	return response.data
}, error => {
	// 失败的回调
	let status = error.response.status
	switch (status) {
		case 400:
			ElMessage({
				message: `请求参数错误`,
				type: 'error'
			})
			break
		case 401:
			ElMessage({
				message: '用户没有权限',
				type: 'error'
			})
			break
		case 403:
			ElMessage({
				message: '用户没有权限',
				type: 'error'
			})
			break
		case 404:
			ElMessage({
				message: '请求路径资源不存在',
				type: 'error'
			})
			break
		case 500:
			ElMessage({
				message: '服务器错误',
				type: 'error'
			})
			break
		case 503:
			ElMessage({
				message: '服务器错误',
				type: 'error'
			})
			break
		default:
			ElMessage({
				message: '未知错误',
				type: 'error'
			})
			break
	}
	return Promise.reject(error)
})

export default request